/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package desarrollo.miruta.servicios;

import java.util.List;
import desarrollo.miruta.model.Punto;
import org.zkoss.bind.annotation.Command;

/**
 *
 * @author alext
 */
public class Distancia {
    
    public static Punto puntoMasCercano(Punto p1, List<Punto> puntosAComparar){
        Punto masCercano = null;
        Double menorDistancia = -1.0;
        for(Punto punto: puntosAComparar){
            Double nuevaDistancia = calcularDistanciaPuntosGeograficos(p1.getLongitud(), p1.getLatitud(), punto.getLongitud(), punto.getLatitud());
            if((menorDistancia == -1.0)||(nuevaDistancia < menorDistancia)){
                System.out.println("cambio el punto mas cercano");
                menorDistancia = nuevaDistancia;
                masCercano = punto;
            }
        }
        return masCercano;
    }
    
    public static double calcularDistanciaPuntosGeograficos(double lat1, double lon1, double lat2, double lon2){
        double distancia;
        double radioTierra = 6378.137;                          //Radio de la tierra en km
        double dLat = coordenadasARadianes(lat2 - lat1);
        double dLong = coordenadasARadianes(lon2 - lon1);

        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(coordenadasARadianes(lat1)) * Math.cos(coordenadasARadianes(lat2)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double d = radioTierra * c;

        return d;                      //Retorna tres decimales
    }
    
    private static double coordenadasARadianes(double coordenada){
                    return (coordenada * (Math.PI / 180));
    }
    
    @Command
    public static void mensaje(){
        System.out.print("Hola");
    }
}
